package org.jeecg.modules.util;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESUtils {
    // 密钥，建议使用更安全的方式存储
    private static final String SECRET_KEY = "1234567890123456"; // 16个字符对应AES-128位密钥

    // 加密方法
    public static String encrypt(String data) throws Exception {
        SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes());

        // 使用Base64进行编码，方便存储
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // 解密方法
    public static String decrypt(String encryptedData) throws Exception {
        SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, key);

        // 使用Base64解码还原为字节数组
        byte[] originalData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));

        return new String(originalData); // 转换为String格式
    }

    public static void main(String[] args) {
        try {
            String idCardNumber = "123456789012345678"; // 需加密的身份证号

            // 加密
            String encrypted = AESUtils.encrypt(idCardNumber);
            System.out.println("加密后的身份证号: " + encrypted);

            // 假设将数据存储到数据库（这里模拟打印）
            // db.save(encrypted);

            // 解密
            String decrypted = AESUtils.decrypt(encrypted);
            System.out.println("解密后的身份证号: " + decrypted);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}
